# -*- coding: UTF-8 -*-
# __author__ = '10459'
from flask import Flask
from app.models.base import db
from flask_login import LoginManager
from flask_mail import Mail

login_manager = LoginManager()
mail = Mail()


def create_app():
    app = Flask(__name__)
    app.config.from_object('app.secure')  # 载入配置文件，还没读取
    app.config.from_object('app.setting')  # 载入配置文件，还没读取
    register_blueprint(app)  # 将蓝图与核心对象关联，核心对象类似于插线板，蓝图对接核心对象，视图函数对接蓝图
    db.init_app(app)  # 将数据库与核心对象关联
    # db.create_all(app=app)     #将数据库模型映射到数据库中，创建数据库表，要传app=app参数过去注意，不然报错
    # 下面这种方式也可以代替上面create_all的用法
    login_manager.init_app(app)  # loginmanger初始化
    login_manager.login_view = "web.login"  # 登录
    login_manager.login_message = "请先登录或注册"  # 消息展示
    mail.init_app(app=app)
    with app.app_context():
        db.create_all()
    return app


def register_blueprint(app):
    # from app.web.book import web
    from app.web import web
    app.register_blueprint(web)
